home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
magic
/
d
/
mtlists.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
5KB
|
121 lines
(*----------------------------------------------------------------------*
* *
* MAGICTOOLS Modula's All purpose GEM Interface Cadre Toolbox *
* ÿ ÿ ÿ ÿ ÿ *
*----------------------------------------------------------------------*
* Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
*----------------------------------------------------------------------*
* Dieses Modul ist urheberrechtlich geschtzt. *
* *
* Die Verffentlichung des Quelltextes oder Teilen daraus, sowie die *
* Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
* oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail- *
* boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen *
* Einverstndnisserklrung des Autors. *
* *
* Die Verbreitung des Moduls als Teil eines gelinkten Programms ist *
* fr Lizenznehmer ausdrcklich erlaubt! Der Autor behlt sich das *
* Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
* widerrufen. *
*----------------------------------------------------------------------*)
(*----------------------------------------------------------------------*
* mtLists Listenverwaltung *
* *
* Implementiert eine geordnete Liste. Durch die typlose Datenform der *
* zu speichernden Information kann das Modul sehr flexibel eingesetzt *
* werden. Maximale Speichergre der Information ist 32kb. *
*----------------------------------------------------------------------*)
DEFINITION MODULE mtLists;
FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
IMPORT SYSTEM;
TYPE ENTRY; (* Eintrag in die Liste *)
TYPE LIST; (* Listentyp *)
TYPE CompResult = (smaller, equal, bigger);
CompProc = PROCEDURE ( (* left *) SYSTEM.ADDRESS,
(* right *) SYSTEM.ADDRESS): CompResult;
(* Eine Prozedur dieses Typs definiert die Ordnung, in der die Liste
* angelegt wird.
* Die Prozedur soll "smaller" returnieren, wenn der Eintrag left kleiner
* bzw. logisch VOR right einzuordnen ist; equal, wenn die Eintrge gleich
* sind; und bigger wenn der Eintrag left grer bzw. logisch NACH right
* einzuordnen ist. Die Prozedur bekommt immer POINTER bergeben, daher die
* ADDRESS-Parameter.
*
* Beispiel fr eine CompProc:
*
* PROCEDURE Compare (left, rigth: ADDRESS): CompResult;
* VAR l, r: POINTER TO ARRAY [0..10] OF CHAR;
* BEGIN
* l:= left; r:= right;
* IF l^[0] < r^[0] THEN RETURN smaller; END;
* IF l^[0] = r^[0] THEN RETURN equal; END;
* RETURN bigger;
* END Compare;
*
*)
PROCEDURE NewList (VAR list: LIST; comp: CompProc): BOOLEAN;
(* Generiert eine neue Liste *)
PROCEDURE DisposeList (VAR list: LIST);
(* Lscht eine Liste, wenn die Liste nicht leer ist, wird sie vorher
* gelscht.
*)
PROCEDURE ListEntries (list: LIST): lCARDINAL;
(* Liefert Anzahl der Eintrge in der Liste *)
PROCEDURE NilEntry (): ENTRY;
(* Liefert einen leeren Pointer, zum Vergleichen usw. *)
PROCEDURE InsertEntry (list: LIST; info: ARRAY OF LOC): BOOLEAN;
(* Legt ein Element in der Liste ab, FALSE wenn dabei ein Fehler auftritt *)
PROCEDURE SearchEntry (list: LIST; from: ENTRY;
info: ARRAY OF LOC; key: CompProc): ENTRY;
(* Sucht in der Liste nach dem Element info, liefert einen Zeiger darauf.
* from ist das Element, ab dem gesucht wird! Mit key wird eine Prozedur
* bergeben, die die Elemente vergleicht. Liefert key ein equal, wird die
* Prozedur abgebrochen, und der Eintrag returniert. Tip: Die in info ber-
* gebenen Daten mssen ja nicht komplett sein. Es kommt auf die Prozedur
* key an...
*)
PROCEDURE DeleteEntry (list: LIST; VAR entry: ENTRY);
(* Lscht einen Eintrag aus der Liste *)
PROCEDURE FirstEntry (list: LIST): ENTRY;
(* Liefert den ersten Eintrag der Liste *)
PROCEDURE LastEntry (list: LIST): ENTRY;
(* Liefert den letzten Eintrag der Liste *)
PROCEDURE NextEntry (entry: ENTRY): ENTRY;
(* Liefert den nachfolgenden Eintrag der Liste *)
PROCEDURE PrevEntry (entry: ENTRY): ENTRY;
(* Liefert den vorhergehenden Eintrag der Liste *)
PROCEDURE GetEntry (entry: ENTRY; VAR info: ARRAY OF LOC): BOOLEAN;
(* bertrgt ein Element aus der Liste. Es wird nur kopiert, wenn die
* Datenstruktur gleich oder grer als die gespeicherte Struktur ist.
* FALSE wenn dabei ein Fehler auftritt (info zu klein, entry NIL).
*)
END mtLists.